package com.xt.website_manager.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.xt.website_manager.dao.CategoryDao;
import com.xt.website_manager.dao.ProductDao;
import com.xt.website_manager.po.*;
import com.xt.website_manager.service.ProductService;
import com.xt.website_manager.util.FileUploadUtil;
import com.xt.website_manager.util.MyPageInfo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.UUID;

/**
 * @Author: jiangyu
 * @Date: 2019/8/18 14:53
 * @Description:
 */
@Service
@Transactional
public class ProductServiceImpl implements ProductService {
    @Resource
    private ProductDao productDao;
    @Resource
    private CategoryDao categoryDao;

    /**
     * 根据二级类目，查询的产品
     */
    @Override
    public MyPageInfo<Product> findAllProducts(MyPageInfo<Product> pageInfo) {
        PageHelper.startPage(pageInfo.getPageNum(), 9);
        List<Product> list = productDao.findAllProducts(pageInfo);
        MyPageInfo<Product> page = new MyPageInfo<Product>(list, 5);
        //封装之前的信息
        page.setSearchProName(pageInfo.getSearchProName());
        page.setCid(pageInfo.getCid());
        page.setSearchCsid(pageInfo.getSearchCsid());
        page.setSearchProName(pageInfo.getSearchProName());
        return page;
    }

        /*
         * 根据一级类目，查询的产品
         *//*
    @Override
    public MyPageInfo<Product> findProductsByCid(Integer pageNow, Integer cid, Integer pageSize) {
        //查询当前类目CategoryExt
        CategoryExt<CategorySecond> categoryExt = categoryDao.findCategoryByCid(cid);
        if(pageSize == null){
            pageSize = 9;
        }
        PageHelper.startPage(pageNow, pageSize);
        List<Product> list = productDao.findProductsByCid(cid);
        MyPageInfo<Product> page = new MyPageInfo<Product>(list,5);
        //将CategoryExt封装进分页实体中
       // page.setCategoryExt(categoryExt);
        System.out.println("总数量：" + page.getTotal());
        System.out.println("当前页查询记录：" + page.getList().size());
        System.out.println("当前页码：" + page.getPageNum());
        System.out.println("每页显示数量：" + page.getPageSize());
        System.out.println("总页：" + page.getPages());
        return page;
    }*/


        /**
         * 查询产品详情
         */
        @Override
        public Product productDetails (Integer pid){
            return productDao.productDetails(pid);
        }

        /**
         * 删除产品
         */
        @Override
        public void deleteProduct (Integer id, String realPath){
            //1.删除本地图片
            Product product = productDao.productDetails(id);
            // 删除本地主图
            new File(realPath + product.getProPicture()).delete();
            //删除本地附件图片
            List<ProductFile> productFileList = productDao.findProductFiles(id);
            for (ProductFile productFile : productFileList) {
                new File(realPath + productFile.getImage()).delete();
            }
            // 2.删除数据库中的记录
            productDao.deleteProduct(id);
            productDao.deleteProFileByPid(id);
        }

        ;

        /**
         * 上传产品
         */
        @Override
        public void uploadPicture (MultipartFile proMainPicture, MultipartFile[]proFile, Product product, String
        realPath){
            try {
                //上传主图
                if (proMainPicture.isEmpty()) {
                    //此文件域未进行上传
                    System.out.println("请选择文件！");
                } else {
                    //如果文件夹不存在，创建新的文件夹
                    File upload_dir = new File(realPath);
                    File directoryFile = FileUploadUtil.makeFullDirectoryObject(upload_dir);
                    // 把文件上传至path的路径，文件名改为为当前时间+原始文件名.扩展名
                    File localFile = new File(directoryFile, UUID.randomUUID() + proMainPicture.getOriginalFilename());
                    //执行上传
                    proMainPicture.transferTo(localFile);
                    //将主图名称封装进product
                    product.setProPicture("/" + directoryFile.getName() + "/" + localFile.getName());
                    //设置日期格式
                    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    // 设置时间
                    product.setCreateTime(df.parse(df.format(new Date())));
                    //向数据库中添加产品
                    productDao.addProduct(product);
                }

                //上传附件图片
                for (MultipartFile file : proFile) {
                    if (file.isEmpty()) {
                        //此文件域未进行上传
                        System.out.println("请选择文件！");
                    } else {
                        ProductFile productFile = new ProductFile();
                        //如果文件夹不存在，创建新的文件夹
                        File upload_dir = new File(realPath);
                        File directoryFile = FileUploadUtil.makeFullDirectoryObject(upload_dir);
                        // 把文件上传至path的路径，文件名改为为当前时间+原始文件名.扩展名
                        File localFile = new File(directoryFile, UUID.randomUUID() + file.getOriginalFilename());
                        //执行上传
                        file.transferTo(localFile);

                        // 封装productFile对象
                        productFile.setImage("/" + directoryFile.getName() + "/" + localFile.getName());
                        productFile.setPid(product.getId());
                        //向数据库中添加附件
                        productDao.addProductFile(productFile);
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        /**
         * 修改产品
         */
        @Override
        public void updateProduct (MultipartFile proMainPicture, MultipartFile[]proFile, Product product, String
        realPath){
            try {
                //上传主图
                if (proMainPicture.isEmpty()) {
                    //此文件域未进行上传
                    System.out.println("未选择主图！");
                } else {
                    //如果文件夹不存在，创建新的文件夹
                    File upload_dir = new File(realPath);
                    File directoryFile = FileUploadUtil.makeFullDirectoryObject(upload_dir);
                    // 把文件上传至path的路径，文件名改为为当前时间+原始文件名.扩展名
                    File localFile = new File(directoryFile, UUID.randomUUID() + proMainPicture.getOriginalFilename());
                    //执行上传
                    proMainPicture.transferTo(localFile);
                    //将主图名称封装进product
                    product.setProPicture("/" + directoryFile.getName() + "/" + localFile.getName());
                }

                //上传附件图片
                for (MultipartFile file : proFile) {
                    if (file.isEmpty()) {
                        //此文件域未进行上传
                        System.out.println("未选择附件");
                    } else {
                        ProductFile productFile = new ProductFile();
                        //如果文件夹不存在，创建新的文件夹
                        File upload_dir = new File(realPath);
                        File directoryFile = FileUploadUtil.makeFullDirectoryObject(upload_dir);
                        // 把文件上传至path的路径，文件名改为为当前时间+原始文件名.扩展名
                        File localFile = new File(directoryFile, UUID.randomUUID() + file.getOriginalFilename());
                        //执行上传
                        file.transferTo(localFile);

                        // 封装productFile对象
                        productFile.setImage("/" + directoryFile.getName() + "/" + localFile.getName());
                        productFile.setPid(product.getId());
                        //向数据库中添加附件
                        productDao.addProductFile(productFile);
                    }
                }

                // 修改数据库中的信息
                productDao.updateProduct(product);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        /**
         * 根据pid查询全部附件
         */
        @Override
        public List<ProductFile> findProductFiles (Integer pid){
            return productDao.findProductFiles(pid);
        }

        /**
         * 删除产品主图
         */
        @Override
        public void delProPic (Integer pid){
            productDao.delProPic(pid);
        }

        /**
         *  查询产品附件详情
         */
        @Override
        public ProductFile productFileDetails (Integer id){
            return productDao.productFileDetails(id);
        }
        ;

        /**
         *  根据id删除附件
         */
        @Override
        public void deleteProFile (Integer id){
            productDao.deleteProFile(id);
        }
        /**
         * 根据二级类目id查询商品总数
         */
        @Override
        public Integer getNewsCount (Integer csid){
            return productDao.getNewsCount(csid);
        }
    }